import momnet from 'moment';
// 埋点上报的接口，暂时屏蔽
// import { eventDataSave, cztracking } from '../../apis/product';
/**
 * 数据上报工具类
 */
class NativeEvent {
  formatParamsObj(uuid, eventId, extra) {
    const reportParams = {
      appKey: 'CHUANGZHANG_Askbob',
      uuid,
      initTime: Date.now(),
      sendTime: Date.now(),
      channel: '',
      dataSource: 'H5',
      appInfo: {
        h5Version: '',
        appVersion: ''
      },
      deviceInfo: {
        deviceId: '',
        deviceType: ''
      },
      events: {
        eventId,
        eventDate: momnet(new Date()).format('YYYYMMDD'),
        startTms: Date.now(),
        actionTms: Date.now(),
        pageId: 'P0728', // 创展 askbob 默认页面事件id
        sessionId: localStorage.getItem('askbobSession'),
        extra
      }
    };
    return reportParams;
  }

  /**
   * 进入页面时候的页面事件
   * @param {*} eventId 事件id
   * @param {*} descript 事件描述
   * @param {*} extras 事件上报参数
   */
  setPage(eventId, eventName, params, eventType) {
    if (!eventId || !eventName) {
      console.warn('上报事件编号(事件描述)不能为空！');
      return;
    }
    eventType = eventType || '页面'; // 定义事件类型，默认为页面事件
    const extra = {
      eventId,
      eventType,
      eventName,
      ...(params || {})
    };
    const uuid = `${eventId}_${Date.now()}`; // 标志唯一的uuid
    const reportParams = this.formatParamsObj(uuid, eventId, extra);
    // const paramsObj = [{ uuid, eventData: JSON.stringify(reportParams) }];
    // 数据上报后台：
    // eventDataSave(paramsObj);
    // 数据上报测试平台
    // cztracking(paramsObj);
    console.log(`${eventType}_上报 =======> ${eventId}`, reportParams);
  }

  /**
   * 曝光事件
   */
  exposure(eventId, eventName, params, eventType) {
    if (!eventId || !eventName) {
      console.warn('上报事件编号(事件描述)不能为空！');
      return;
    }
    eventType = eventType || '曝光'; // 定义事件类型，默认为曝光事件
    const extra = {
      eventId,
      eventType,
      eventName,
      ...(params || {})
    };
    const uuid = `${eventId}_${Date.now()}`; // 标志唯一的uuid
    const reportParams = this.formatParamsObj(uuid, eventId, extra);
    // const paramsObj = [{ uuid, eventData: JSON.stringify(reportParams) }];
    // 数据上报后台：
    // eventDataSave(paramsObj);
    // 数据上报测试平台
    // cztracking(paramsObj);
    console.log(`${eventType}_上报 =======> ${eventId}`, reportParams);
  }

  /**
   * 点击事件
   */
  report(eventId, eventName, params, eventType) {
    if (!eventId || !eventName) {
      console.warn('上报事件编号(事件描述)不能为空！');
      return;
    }
    eventType = eventType || '点击'; // 定义事件类型
    const extra = {
      eventId,
      eventType,
      eventName,
      ...(params || {})
    };
    const uuid = `${eventId}_${Date.now()}`; // 标志唯一的uuid
    const reportParams = this.formatParamsObj(uuid, eventId, extra);
    // const paramsObj = [{ uuid, eventData: JSON.stringify(reportParams) }];
    // 数据上报后台：
    // eventDataSave(paramsObj);
    // 数据上报测试平台
    // cztracking(paramsObj);
    console.log(`${eventType}_上报 =======> ${eventId}`, reportParams);
  }

  /**
   * 批量上报
   * @param {*} eventId
   * @param {*} eventName
   * @param {*} paramsList 汇总的上报的list
   * @param {*} eventType
   */
  batchElementExposure(eventId, eventName, paramsList, eventType) {
    if (!eventId || !eventName) {
      console.warn('上报事件编号(事件描述)不能为空！');
      return;
    }
    eventType = eventType || '计时'; // 定义事件类型
    // 对汇总的批量数据统一处理：
    if (!paramsList.length) return;
    const paramsObj = [];
    paramsList.forEach(params => {
      const extra = {
        eventId,
        eventType,
        eventName,
        ...(params || {})
      };
      const { uuid } = params; // 此处的标志唯一的uuid在数据缓存时候生成
      const reportParams = this.formatParamsObj(uuid, eventId, extra);
      paramsObj.push({ uuid, eventData: JSON.stringify(reportParams) });
    });
    // 数据上报后台：
    // eventDataSave(paramsObj);
    // 数据上报测试平台
    // cztracking(paramsObj);
    console.log(`${eventType}_批量上报 =======> ${eventId}`, paramsObj);
  }
}

export default {
  $event: new NativeEvent()
};